<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><script type="text/javascript" src="https://cdn.jsdelivr.net/gh/opencobra/cobratoolbox@ffa0229fc0c01c9236bb7e961f65712443277719/latest/_static/js/iframeResizer.contentWindow.min.js"></script><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,IE=9,chrome=1"><meta name="generator" content="MATLAB 2021a"><title>Flux Balance Analysis: Alternate optimal solutions</title><style type="text/css">.rtcContent { padding: 30px; } .S0 { margin: 3px 10px 5px 4px; padding: 0px; line-height: 28.8px; min-height: 0px; white-space: normal; color: rgb(213, 80, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 24px; font-weight: normal; text-align: left;  }
.S1 { margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: normal; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: bold; text-align: left;  }
.S2 { margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: normal; text-align: left;  }
.CodeBlock { background-color: #F7F7F7; margin: 10px 0 10px 0;}
.S3 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 0px none rgb(0, 0, 0); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S4 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 0px none rgb(0, 0, 0); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S5 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px 0px 4px 4px; padding: 0px 45px 4px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S6 { margin: 10px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: normal; text-align: center;  }
.S7 { margin: 10px 0px 20px; padding-left: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 14px;  }
.S8 { margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: normal;  }
.S9 { margin: 10px 10px 5px 4px; padding: 0px; line-height: 18px; min-height: 0px; white-space: normal; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 15px; font-weight: bold; text-align: left;  }
.S10 { margin: 15px 10px 5px 4px; padding: 0px; line-height: 18px; min-height: 0px; white-space: normal; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 17px; font-weight: bold; text-align: left;  }
.S11 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px; padding: 0px 45px 4px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S12 { color: rgb(64, 64, 64); padding: 10px 0px 6px 17px; background: rgb(255, 255, 255) none repeat scroll 0% 0% / auto padding-box border-box; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; overflow-x: hidden; line-height: 17.234px;  }
.S13 { margin: 10px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: normal; text-align: left;  }
.S14 { margin: 3px 10px 5px 4px; padding: 0px; line-height: 18px; min-height: 0px; white-space: normal; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 15px; font-weight: bold; text-align: left;  }</style></head><body><div class = rtcContent><h1  class = 'S0' id = 'T_4CE2BBD0' ><span>Flux Balance Analysis: Alternate optimal solutions</span></h1><h2  class = 'S1' id = 'H_8C6952DD' ><span>Author(s): Ronan M.T. Fleming, Leiden University</span></h2><h2  class = 'S1' id = 'H_13B2214D' ><span>Reviewer(s): </span></h2><h2  class = 'S1' id = 'H_BBAA3A65' ><span>INTRODUCTION</span></h2><div  class = 'S2'><span>In this practical, the existence of Alternate Optimal Solutions [2] to a Flux Balance Analysis (FBA) problem is introduced using the E. coli core model[1], with functions in the COBRA Toolbox v3.0 [3].  </span></div><h2  class = 'S1' id = 'H_7E629399' ><span>E. coli core model</span></h2><div  class = 'S2'><span>A map of the E. coli core model is shown in Figure 1. </span></div><div  class = 'S2'><img class = "imageNode" src = "" width = "908" height = "809" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S2'><span style=' font-weight: bold;'>Figure 1</span><span>  </span><span style=' font-weight: bold;'>Map of the core E. coli metabolic network. </span><span> Orange circles represent cytosolic metabolites, yellow circles represent extracellular metabolites, and the blue arrows represent reactions.  Reaction name abbreviations are uppercase (blue) and metabolite name abbreviations are lowercase (rust colour).  This flux map was drawn using SimPheny and edited for clarity with Adobe Illustrator. </span></div><h2  class = 'S1' id = 'H_7E2A567B' ><span>MATERIALS - EQUIPMENT SETUP</span></h2><div  class = 'S2'><span>Please ensure that all the required dependencies (e.g. , </span><span style=' font-family: monospace;'>git</span><span> and </span><span style=' font-family: monospace;'>curl</span><span>) of The COBRA Toolbox have been properly installed by following the installation guide </span><a href = "https://opencobra.github.io/cobratoolbox/stable/installation.html"><span>here</span></a><span>. Please ensure that the COBRA Toolbox has been initialised (tutorial_initialize.mlx) and verify that the pre-packaged LP and QP solvers are functional (tutorial_verify.mlx).</span></div><h2  class = 'S1' id = 'H_B642E8E4' ><span>PROCEDURE</span></h2><h2  class = 'S1' id = 'H_ED106D18' ><span>Load E. coli core model</span></h2><div  class = 'S2'><span>The most direct way to load a model into The COBRA Toolbox is to use the </span><span style=' font-family: monospace;'>readCbModel</span><span> function. For example, to load a model from a MAT-file, you can simply use the filename (with or without file extension). </span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S3'><span style="white-space: normal"><span >fileName = </span><span style="color: rgb(170, 4, 249);">'ecoli_core_model.mat'</span><span >;</span></span></div></div><div class="inlineWrapper"><div  class = 'S4'><span style="white-space: normal"><span style="color: rgb(14, 0, 255);">if </span><span >~exist(</span><span style="color: rgb(170, 4, 249);">'modelOri'</span><span >,</span><span style="color: rgb(170, 4, 249);">'var'</span><span >)</span></span></div></div><div class="inlineWrapper"><div  class = 'S4'><span style="white-space: normal"><span >    modelOri = readCbModel(fileName);</span></span></div></div><div class="inlineWrapper"><div  class = 'S4'><span style="white-space: normal"><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div  class = 'S4'><span style="white-space: normal"><span style="color: rgb(2, 128, 9);">%backward compatibility with primer requires relaxation of upper bound on</span></span></div></div><div class="inlineWrapper"><div  class = 'S4'><span style="white-space: normal"><span style="color: rgb(2, 128, 9);">%ATPM</span></span></div></div><div class="inlineWrapper"><div  class = 'S4'><span style="white-space: normal"><span >modelOri = changeRxnBounds(modelOri,</span><span style="color: rgb(170, 4, 249);">'ATPM'</span><span >,1000,</span><span style="color: rgb(170, 4, 249);">'u'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S5'><span style="white-space: normal"><span >model = modelOri;</span></span></div></div></div><div  class = 'S6'><img class = "imageNode" src = "" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S2'><span>The meaning of each field in a standard model is defined in the </span><a href = "https://github.com/opencobra/cobratoolbox/blob/master/docs/source/notes/COBRAModelFields.md"><span>standard COBRA model field definition</span></a><span>.</span></div><div  class = 'S2'><span>In general, the following fields should always be present: </span></div><ul  class = 'S7'><li  class = 'S8'><span style=' font-weight: bold;'>S</span><span>, the stoichiometric matrix</span></li><li  class = 'S8'><span style=' font-weight: bold;'>mets</span><span>, the identifiers of the metabolites</span></li><li  class = 'S8'><span style=' font-weight: bold;'>b</span><span>, Accumulation (positive) or depletion (negative) of the corresponding metabolites. 0 Indicates no concentration change.</span></li><li  class = 'S8'><span style=' font-weight: bold;'>csense</span><span>, indicator whether the b vector is a lower bound ('G'), upper bound ('L'), or hard constraint 'E' for the metabolites.</span></li><li  class = 'S8'><span style=' font-weight: bold;'>rxns</span><span>, the identifiers of the reactions</span></li><li  class = 'S8'><span style=' font-weight: bold;'>lb</span><span>, the lower bounds of the reactions</span></li><li  class = 'S8'><span style=' font-weight: bold;'>ub</span><span>, the upper bounds of the reactions</span></li><li  class = 'S8'><span style=' font-weight: bold;'>c</span><span>, the linear objective</span></li><li  class = 'S8'><span style=' font-weight: bold;'>genes</span><span>, the list of genes in your model </span></li><li  class = 'S8'><span style=' font-weight: bold;'>rules</span><span>, the Gene-protein-reaction rules in a computer readable format present in your model.</span></li><li  class = 'S8'><span style=' font-weight: bold;'>osenseStr</span><span>, the objective sense either </span><span style=' font-family: monospace;'>'max'</span><span> for maximisation or </span><span style=' font-family: monospace;'>'min'</span><span> for minimisation</span></li></ul><h2  class = 'S1' id = 'H_CDF14152' ><span>Checking the non-trivial constraints on a model</span></h2><h4  class = 'S9' id = 'H_26981136' ><span>What are the default constraints on the model? </span></h4><h4  class = 'S9' id = 'H_68230CB2' ><span>Hint: </span><span style=' font-family: monospace;'>printConstraints</span></h4><h2  class = 'S1' id = 'H_CC033BCF' ><span>Alternate optimal solutions</span></h2><div  class = 'S2'><span>The flux distribution calculated by FBA is often not unique.  In many cases, it is possible for a biological system to achieve the same objective value by using alternate pathways, so phenotypically different alternate optimal solutions are possible.   A method that uses FBA to identify alternate optimal solutions is Flux Variability Analysis (FVA)[13].  This is a method that identifies the maximum and minimum possible fluxes through a particular reaction with the objective value constrained to be close to or equal to its optimal value.  Performing FVA on a single reaction using the basic COBRA Toolbox functions is simple.  First, use functions changeRxnBounds, changeObjective, and optimizeCbModel to perform FBA as described in the previous examples.  Get the optimal objective value (FBAsolution.f), and then set both the lower and upper bounds of the objective reaction to exactly this value.  Next, set the reaction of interest as the objective, and use FBA to minimize and maximize this new objective in two separate steps.  This will give the minimum and maximum possible fluxes through this reaction while contributing to the optimal objective value.</span></div><h4  class = 'S9' id = 'H_4C150B5E' ><span>What is the minimum and maximum rate of the malic enzyme reaction (ME1) when the E. coli core model grows at a maximal rate on succinate as a carbon source?</span></h4><h4  class = 'S9'><span>Hint: </span><span style=' font-family: monospace;'>changeRxnBounds, printConstraints, optimizeCbModel, changeObjective, solution = optimizeCbModel(model, osenseStr)</span></h4><h3  class = 'S10'><span>Display a flux map for alternate solutions for maximum aerobic growth on succinate.</span></h3><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S3'><span style="white-space: normal"><span >outputFormatOK = changeCbMapOutput(</span><span style="color: rgb(170, 4, 249);">'matlab'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S4'><span style="white-space: normal"><span >map=readCbMap(</span><span style="color: rgb(170, 4, 249);">'ecoli_core_map'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S4'><span style="white-space: normal"><span >options.zeroFluxWidth = 0.1;</span></span></div></div><div class="inlineWrapper"><div  class = 'S4'><span style="white-space: normal"><span >options.rxnDirMultiplier = 10;</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S11'><span style="white-space: normal"><span >drawFlux(map, model, FBAsolution_ME1_Min.v, options);</span></span></div><div  class = 'S12'><div class="inlineElement eoOutputWrapper embeddedOutputsFigure" uid="3C15D30A" data-testid="output_0" style="width: 458px;"><div class="figureElement"><img class="figureImage figureContainingNode" src="" style="width: 560px;"></div></div></div></div></div><div  class = 'S13'><span style=' font-weight: bold;'></span></div><h2  class = 'S1'><span>Systematic evaluation of alternate optima with Flux Variability Analysis</span></h2><div  class = 'S2'><span>Flux variability analysis minimises and maximises the rate of each reaction in a model to evaluate what range of alternate optima exist for each reaction. The COBRA Toolbox includes a built in function for performing FVA called </span><span style=' font-family: monospace;'>fluxVariability</span><span>.  This function is useful because, by default, it performs FVA on every reaction in a model.  </span></div><h4  class = 'S9'><span>What reactions vary their optimal flux in the set of alternate optimal solutions to maximum growth of E. coli on succinate? </span></h4><h4  class = 'S9'><span>Hint: create a table with varying reactions using the output from </span><span style=' font-family: monospace;'>fluxVariability</span></h4><div  class = 'S2'><span></span></div><h4  class = 'S9'><span>Are there any reactions that are not used in one optimal solution but used in another optimal solution? </span></h4><h4  class = 'S9'><span>Hint: study the flux variablity analysis results</span></h4><div  class = 'S2'><span></span></div><h4  class = 'S9'><span>What are the computational and biochemical aspects to consider when interpreting these alternate optimal solutions?</span></h4><h4  class = 'S9'><span>Hint: the flux span for some reactions is far larger than for other reactions</span></h4><div  class = 'S2'><span></span></div><h4  class = 'S14'><span>In E.coli core, what reactions vary their optimal flux in the set of alternate optimal solutions where  PYK (pyruvate kinase) is always at a maximum rate? </span></h4><h4  class = 'S9'><span>Hint: </span><span style=' font-family: monospace;'>fluxVariability, drawFlux</span></h4><div  class = 'S2'><span style=' font-family: monospace;'></span></div><h2  class = 'S1'><span>TIMING</span></h2><div  class = 'S2'><span style=' font-style: italic;'>1 hrs</span></div><h2  class = 'S1'><span>ANTICIPATED RESULTS</span></h2><div  class = 'S2'><span>Understanding that, often, many alternate optimal flux vectors can give rise to the same optimal objective to a flux balance analysis problem.</span></div><h2  class = 'S1' id = 'H_878295C9' ><span style=' font-style: italic;'>Acknowledgments</span></h2><div  class = 'S2'><span>Part of this tutorial was originally written by Jeff Orth and Ines Thiele for the publication "What is flux balance analysis?"</span></div><h2  class = 'S1' id = 'H_B884F0F4' ><span>REFERENCES</span></h2><div  class = 'S2'><span>1. Orth, J.D., Fleming, R.M. &amp; Palsson, B.O. in EcoSal - Escherichia coli and Salmonella Cellular and Molecular Biology. (ed. P.D. Karp) (ASM Press, Washington D.C.; 2009).</span></div><div  class = 'S2'><span>2. Mahadevan, R. &amp; Schilling, C.H. The effects of alternate optimal solutions in constraint-based genome-scale metabolic models. Metabolic engineering 5, 264-276 (2003).</span></div><div  class = 'S2'><span>3. Laurent Heirendt &amp; Sylvain Arreckx, Thomas Pfau, Sebastian N. Mendoza, Anne Richelle, Almut Heinken, Hulda S. Haraldsdottir, Jacek Wachowiak, Sarah M. Keating, Vanja Vlasov, Stefania Magnusdottir, Chiam Yu Ng, German Preciat, Alise Zagare, Siu H.J. Chan, Maike K. Aurich, Catherine M. Clancy, Jennifer Modamio, John T. Sauls, Alberto Noronha, Aarash Bordbar, Benjamin Cousins, Diana C. El Assal, Luis V. Valcarcel, Inigo Apaolaza, Susan Ghaderi, Masoud Ahookhosh, Marouen Ben Guebila, Andrejs Kostromins, Nicolas Sompairac, Hoai M. Le, Ding Ma, Yuekai Sun, Lin Wang, James T. Yurkovich, Miguel A.P. Oliveira, Phan T. Vuong, Lemmer P. El Assal, Inna Kuperstein, Andrei Zinovyev, H. Scott Hinton, William A. Bryant, Francisco J. Aragon Artacho, Francisco J. Planes, Egils Stalidzans, Alejandro Maass, Santosh Vempala, Michael Hucka, Michael A. Saunders, Costas D. Maranas, Nathan E. Lewis, Thomas Sauter, Bernhard Ø. Palsson, Ines Thiele, Ronan M.T. Fleming, </span><span style=' font-weight: bold;'>Creation and analysis of biochemical constraint-based models: the COBRA Toolbox v3.0</span><span>, Nature Protocols, volume 14, pages 639–702, 2019 </span><a href = "https://doi.org/10.1038/s41596-018-0098-2"><span>doi.org/10.1038/s41596-018-0098-2</span></a><span>.</span></div><div  class = 'S2'></div>
<br>
<!-- 
##### SOURCE BEGIN #####
%% Flux Balance Analysis: Alternate optimal solutions
%% Author(s): Ronan M.T. Fleming, Leiden University
%% Reviewer(s): 
%% INTRODUCTION
% In this practical, the existence of Alternate Optimal Solutions [2] to a Flux 
% Balance Analysis (FBA) problem is introduced using the E. coli core model[1], 
% with functions in the COBRA Toolbox v3.0 [3].  
%% E. coli core model
% A map of the E. coli core model is shown in Figure 1. 
% 
% 
% 
% *Figure 1*  *Map of the core E. coli metabolic network.*  Orange circles represent 
% cytosolic metabolites, yellow circles represent extracellular metabolites, and 
% the blue arrows represent reactions.  Reaction name abbreviations are uppercase 
% (blue) and metabolite name abbreviations are lowercase (rust colour).  This 
% flux map was drawn using SimPheny and edited for clarity with Adobe Illustrator. 
%% MATERIALS - EQUIPMENT SETUP
% Please ensure that all the required dependencies (e.g. , |git| and |curl|) 
% of The COBRA Toolbox have been properly installed by following the installation 
% guide <https://opencobra.github.io/cobratoolbox/stable/installation.html here>. 
% Please ensure that the COBRA Toolbox has been initialised (tutorial_initialize.mlx) 
% and verify that the pre-packaged LP and QP solvers are functional (tutorial_verify.mlx).
%% PROCEDURE
%% Load E. coli core model
% The most direct way to load a model into The COBRA Toolbox is to use the |readCbModel| 
% function. For example, to load a model from a MAT-file, you can simply use the 
% filename (with or without file extension). 

fileName = 'ecoli_core_model.mat';
if ~exist('modelOri','var')
    modelOri = readCbModel(fileName);
end
%backward compatibility with primer requires relaxation of upper bound on
%ATPM
modelOri = changeRxnBounds(modelOri,'ATPM',1000,'u');
model = modelOri;
%% 
% 
% 
% The meaning of each field in a standard model is defined in the <https://github.com/opencobra/cobratoolbox/blob/master/docs/source/notes/COBRAModelFields.md 
% standard COBRA model field definition>.
% 
% In general, the following fields should always be present: 
%% 
% * *S*, the stoichiometric matrix
% * *mets*, the identifiers of the metabolites
% * *b*, Accumulation (positive) or depletion (negative) of the corresponding 
% metabolites. 0 Indicates no concentration change.
% * *csense*, indicator whether the b vector is a lower bound ('G'), upper bound 
% ('L'), or hard constraint 'E' for the metabolites.
% * *rxns*, the identifiers of the reactions
% * *lb*, the lower bounds of the reactions
% * *ub*, the upper bounds of the reactions
% * *c*, the linear objective
% * *genes*, the list of genes in your model 
% * *rules*, the Gene-protein-reaction rules in a computer readable format present 
% in your model.
% * *osenseStr*, the objective sense either |'max'| for maximisation or |'min'| 
% for minimisation
%% Checking the non-trivial constraints on a model
% What are the default constraints on the model? 
% Hint: |printConstraints|
%% Alternate optimal solutions
% The flux distribution calculated by FBA is often not unique.  In many cases, 
% it is possible for a biological system to achieve the same objective value by 
% using alternate pathways, so phenotypically different alternate optimal solutions 
% are possible.   A method that uses FBA to identify alternate optimal solutions 
% is Flux Variability Analysis (FVA)[13].  This is a method that identifies the 
% maximum and minimum possible fluxes through a particular reaction with the objective 
% value constrained to be close to or equal to its optimal value.  Performing 
% FVA on a single reaction using the basic COBRA Toolbox functions is simple.  
% First, use functions changeRxnBounds, changeObjective, and optimizeCbModel to 
% perform FBA as described in the previous examples.  Get the optimal objective 
% value (FBAsolution.f), and then set both the lower and upper bounds of the objective 
% reaction to exactly this value.  Next, set the reaction of interest as the objective, 
% and use FBA to minimize and maximize this new objective in two separate steps.  
% This will give the minimum and maximum possible fluxes through this reaction 
% while contributing to the optimal objective value.
% What is the minimum and maximum rate of the malic enzyme reaction (ME1) when the E. coli core model grows at a maximal rate on succinate as a carbon source?
% Hint: |changeRxnBounds, printConstraints, optimizeCbModel, changeObjective, solution = optimizeCbModel(model, osenseStr)|
% Display a flux map for alternate solutions for maximum aerobic growth on succinate.

outputFormatOK = changeCbMapOutput('matlab');
map=readCbMap('ecoli_core_map');
options.zeroFluxWidth = 0.1;
options.rxnDirMultiplier = 10;
drawFlux(map, model, FBAsolution_ME1_Min.v, options);
%% 
% 
%% Systematic evaluation of alternate optima with Flux Variability Analysis
% Flux variability analysis minimises and maximises the rate of each reaction 
% in a model to evaluate what range of alternate optima exist for each reaction. 
% The COBRA Toolbox includes a built in function for performing FVA called |fluxVariability|.  
% This function is useful because, by default, it performs FVA on every reaction 
% in a model.  
% What reactions vary their optimal flux in the set of alternate optimal solutions to maximum growth of E. coli on succinate? 
% Hint: create a table with varying reactions using the output from |fluxVariability|
% 
% Are there any reactions that are not used in one optimal solution but used in another optimal solution? 
% Hint: study the flux variablity analysis results
% 
% What are the computational and biochemical aspects to consider when interpreting these alternate optimal solutions?
% Hint: the flux span for some reactions is far larger than for other reactions
% 
% In E.coli core, what reactions vary their optimal flux in the set of alternate optimal solutions where  PYK (pyruvate kinase) is always at a maximum rate? 
% Hint: |fluxVariability, drawFlux|
% 
%% TIMING
% _1 hrs_
%% ANTICIPATED RESULTS
% Understanding that, often, many alternate optimal flux vectors can give rise 
% to the same optimal objective to a flux balance analysis problem.
%% _Acknowledgments_
% Part of this tutorial was originally written by Jeff Orth and Ines Thiele 
% for the publication "What is flux balance analysis?"
%% REFERENCES
% 1. Orth, J.D., Fleming, R.M. & Palsson, B.O. in EcoSal - Escherichia coli 
% and Salmonella Cellular and Molecular Biology. (ed. P.D. Karp) (ASM Press, Washington 
% D.C.; 2009).
% 
% 2. Mahadevan, R. & Schilling, C.H. The effects of alternate optimal solutions 
% in constraint-based genome-scale metabolic models. Metabolic engineering 5, 
% 264-276 (2003).
% 
% 3. Laurent Heirendt & Sylvain Arreckx, Thomas Pfau, Sebastian N. Mendoza, 
% Anne Richelle, Almut Heinken, Hulda S. Haraldsdottir, Jacek Wachowiak, Sarah 
% M. Keating, Vanja Vlasov, Stefania Magnusdottir, Chiam Yu Ng, German Preciat, 
% Alise Zagare, Siu H.J. Chan, Maike K. Aurich, Catherine M. Clancy, Jennifer 
% Modamio, John T. Sauls, Alberto Noronha, Aarash Bordbar, Benjamin Cousins, Diana 
% C. El Assal, Luis V. Valcarcel, Inigo Apaolaza, Susan Ghaderi, Masoud Ahookhosh, 
% Marouen Ben Guebila, Andrejs Kostromins, Nicolas Sompairac, Hoai M. Le, Ding 
% Ma, Yuekai Sun, Lin Wang, James T. Yurkovich, Miguel A.P. Oliveira, Phan T. 
% Vuong, Lemmer P. El Assal, Inna Kuperstein, Andrei Zinovyev, H. Scott Hinton, 
% William A. Bryant, Francisco J. Aragon Artacho, Francisco J. Planes, Egils Stalidzans, 
% Alejandro Maass, Santosh Vempala, Michael Hucka, Michael A. Saunders, Costas 
% D. Maranas, Nathan E. Lewis, Thomas Sauter, Bernhard Ø. Palsson, Ines Thiele, 
% Ronan M.T. Fleming, *Creation and analysis of biochemical constraint-based models: 
% the COBRA Toolbox v3.0*, Nature Protocols, volume 14, pages 639–702, 2019 <https://doi.org/10.1038/s41596-018-0098-2 
% doi.org/10.1038/s41596-018-0098-2>.
% 
%
##### SOURCE END #####
-->
</div></body></html>